Linux SELinux ์ •๋ฆฌ (SELinux ยท ์ ‘๊ทผ์ œ์–ด)

NOTE

SELinux(๊ฐ•์ œ์  ์ ‘๊ทผ์ œ์–ด, MAC)์˜ ๊ฐœ๋…, ์ ‘๊ทผ์ œ์–ด ๋ชจ๋ธ(DAC/MAC/RBAC), ๋™์ž‘ ๋ชจ๋“œยท์ •์ฑ…, ๋ณด์•ˆ ์ปจํ…์ŠคํŠธยทBooleanยทํฌํŠธ ๋ ˆ์ด๋ธ” ๊ด€๋ฆฌ์™€ ์‹ค์Šต ์‹œ๋‚˜๋ฆฌ์˜ค ์ •๋ฆฌ.

๐Ÿ“Œ ๊ฐœ๋…

SELinux๋ž€?

  • Security-Enhanced Linux
  • ์ปค๋„ ๋ ˆ๋ฒจ์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฐ•์ œ์  ์ ‘๊ทผ์ œ์–ด(MAC) ๋ณด์•ˆ ์ปค๋„
  • DAC ๊ถŒํ•œ(chmod)๋ณด๋‹ค ์šฐ์„  ์ ์šฉ

์ ‘๊ทผ์ œ์–ด ๋ชจ๋ธ

  • Subject(์ฃผ์ฒด): ์‚ฌ์šฉ์ž, ํ”„๋กœ์„ธ์Šค
  • Object(๊ฐ์ฒด): ํŒŒ์ผ, ๋””๋ ‰ํ† ๋ฆฌ, ํฌํŠธ ๋“ฑ ๋ฆฌ์†Œ์Šค
๋ชจ๋ธ์„ค๋ช…๋ฆฌ๋ˆ…์Šค ์ ์šฉ
DAC์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ์ž„์˜ ์„ค์ •๊ธฐ๋ณธ chmod
MAC๋ณด์•ˆ ๋ ˆ์ด๋ธ” + ์ •์ฑ…SELinux
RBAC์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ๊ณ ๊ธ‰ ๋ณด์•ˆ ๋ชจ๋ธ

MAC ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ: ๋ณด์•ˆ ๋ ˆ์ด๋ธ”(Context), ์ •์ฑ… ์Šค์œ„์น˜(Boolean). DAC ํ—ˆ์šฉ ํ›„ MAC์—์„œ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•œ๋‹ค.

์ •์ฑ… ์œ ํ˜• / ๋™์ž‘ ๋ชจ๋“œ

์ •์ฑ… ํƒ€์ž…์„ค๋ช…
targetedํŠน์ • ํ”„๋กœ์„ธ์Šค๋งŒ ๋ณดํ˜ธ (๊ธฐ๋ณธ)
minimum์ตœ์†Œ ๋ณดํ˜ธ
mls๋ณด์•ˆ ๋“ฑ๊ธ‰ ๋ถ„๋ฆฌ
๋™์ž‘ ๋ชจ๋“œ์„ค๋ช…
Enforcing๊ฐ•์ œ + ๋กœ๊ทธ
Permissive๋กœ๊ทธ๋งŒ ๊ธฐ๋ก
Disabled์™„์ „ ๋น„ํ™œ์„ฑ

WARNING

/etc/selinux/config ๋ณ€๊ฒฝ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•œ๋‹ค.

๋ณด์•ˆ ์ปจํ…์ŠคํŠธ ๊ตฌ์กฐ

์‚ฌ์šฉ์ž : ์—ญํ•  : ํƒ€์ž… : ๋ ˆ๋ฒจ

๐Ÿ’ป ์˜ˆ์‹œ

SELinux ์ƒํƒœ / ๋ชจ๋“œ

getenforce
sestatus
vi /etc/selinux/config   # ์ •์ฑ…ยท๋ชจ๋“œ ์„ค์ • ํŒŒ์ผ
 
# ๋Ÿฐํƒ€์ž„ ๋ณ€๊ฒฝ
setenforce 1   # enforcing
setenforce 0   # permissive

๋ณด์•ˆ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ

# ํ™•์ธ
ps axZ
ls -alZ
 
# ์ž„์‹œ ๋ณ€๊ฒฝ
chcon -t httpd_sys_content_t ํŒŒ์ผ
 
# ๋ณต์›
restorecon -v ํŒŒ์ผ
restorecon -rv ๋””๋ ‰ํ† ๋ฆฌ
 
# ์˜๊ตฌ ์ •์ฑ… ๊ด€๋ฆฌ (๊ธฐ๋ณธ ์ •์ฑ…์€ ์‚ญ์ œ ๋ถˆ๊ฐ€)
semanage fcontext -l
semanage fcontext -a -t ํƒ€์ž… ๊ฒฝ๋กœ
semanage fcontext -d -t ํƒ€์ž… ๊ฒฝ๋กœ

Boolean (์ •์ฑ… ์Šค์œ„์น˜)

getsebool -a
semanage boolean -l
 
setsebool httpd_enable_homedirs on        # ๋Ÿฐํƒ€์ž„
setsebool -P httpd_enable_homedirs on     # ์˜๊ตฌ

ํฌํŠธ ๋ณด์•ˆ ๋ ˆ์ด๋ธ”

semanage port -l
semanage port -a -t http_port_t -p tcp 8080
semanage port -m -t http_port_t -p tcp 8080
semanage port -d -t http_port_t -p tcp 8080

์‹ค์Šต ํ•ต์‹ฌ ์‹œ๋‚˜๋ฆฌ์˜ค

๋ฌธ์ œ ์ƒํ™ฉ: /home/user/index.html์„ /var/www/html๋กœ ์ด๋™ํ–ˆ๋”๋‹ˆ ์›น ์ ‘์†์ด SELinux์— ์˜ํ•ด ์ฐจ๋‹จ๋จ.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€:

# 1) Permissive (์ž„์‹œ)
setenforce 0
 
# 2) Context ๋ณต๊ตฌ (์ •์„)
restorecon -v /var/www/html/index.html
 
# 3) Boolean ํ—ˆ์šฉ
setsebool -P httpd_enable_homedirs on